//    Copyright (C) 2013  <lugocreation@gmail.com>
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
package org.jpgolay.gui.progressBar;

import java.io.PrintStream;

// Referenced classes of package org.jpgolay.gui.progressBar:
//            SwingWorker
public class LongTask {

    class ActualTask {

        ActualTask() {
            while (!canceled && !done) {
                try {
                    Thread.sleep(1000L);
                    current += Math.random() * 100D;
                    if (current >= lengthOfTask) {
                        done = true;
                        current = lengthOfTask;
                    }
                    statMessage = String.valueOf(current);
                } catch (InterruptedException e) {
                    System.out.println("ActualTask interrupted");
                }
            }
        }
    }

    public LongTask() {
        current = 0;
        done = false;
        canceled = false;
        lengthOfTask = 1000;
    }

    public void go() {
        SwingWorker worker = new SwingWorker() {
            public Object construct() {
                current = 0;
                done = false;
                canceled = false;
                statMessage = null;
                return new ActualTask();
            }
        };
        worker.start();
    }

    public int getLengthOfTask() {
        return lengthOfTask;
    }

    public int getCurrent() {
        return current;
    }

    public void stop() {
        canceled = true;
        statMessage = null;
    }

    public boolean isDone() {
        return done;
    }

    public String getMessage() {
        return statMessage;
    }
    private int lengthOfTask;
    private int current;
    private boolean done;
    private boolean canceled;
    private String statMessage;
}
